Unterprogramme als Subroutinen

Ein Unterprogramm ist ein Baustein, der von Programmierern aufgerufen werden kann, ohne dass dessen Inhalt genau bekannt sein muss. Das folgende Programm enthält ein Unterprogramm QuadratFesterLänge, das ohne Intervention des Benutzers ein Quadrat zeichnet. Das Quadrat entsteht nicht interaktiv wie mit einem Zeichenprogramm sondern programmgesteuert. Positions- und Grössenangaben sind in einem Grafikprogramm nur dann möglich, wenn das Programm ein Koordinatensystem und eine Masseinheit kennt. Die meisten Programmierumgebungen verwenden die Masseinheit Punkt (engl. pixel für picture element) und das rechtwinklige Koordinatensystem:

Das Koordinatensystem von Excel beginnt die Zählung links oben. Der Punkt mit der X-Koordinate von 0 und der Y-Koordinate von 0 heisst Ursprung. Unser Quadrat soll seine linke obere Ecke im Punkt (100, 100), also 100 Punkte vom Ursprung nach unten und 100 Punkte nach rechts, haben. Das folgende Bild zeigt das Quadrat als Verbindung von vier Eckpunkten durch Geraden:

Entwurfssprachlich lässt sich das programmgesteuerte Zeichnen des Beispielquadrats wie folgt beschreiben:

Unterprogramm QuadratFesterLänge
  Zeichne hintereinander ...
    die Gerade(100,100, 200,100)
    die Gerade(200,100, 200,200)
    die Gerade(200,200, 100,200)
    die Gerade(100,200, 100,100)

Die Anweisung 'Gerade' zeichnet eine gerade Linie zwischen einem ersten und einem zweiten Punkt. Der erste Aufruf von Gerade zeichnet eine Gerade zwischen dem linken oberen und dem rechten oberen Eckpunkt des Quadrats. Die restlichen Anweisungen zeichnen gleich grosse Geraden zwischen den übrigen Eckpunkten.

Die erste Geradenanweisung des folgenden VBA-Programms zeichnet eine Gerade. Die programmiersprachliche Anweisung enthält mehr Information und ist deshalb länger als die entwurfssprachliche Version:

Worksheets(“Ausgabeblatt”)
  .Shapes.AddLine.(100,100, 200,100).Visible = True

Die Anweisung besteht aus den folgenden Elementen:

Der gleiche Inhalt lässt sich auch abgekürzt schreiben:

Ausgabeblatt
  .Shapes.AddLine.(100,100, 200,100).Visible = True

Das folgende Unterprogramm fasst vier Geradenanweisungen unter dem Namen QuadratFesterLänge zusammen. Die Anweisungen Sub und End Sub fassen die Anweisungen dazwischen zu einer Subroutine zusammen. Die Klammer With ... End With verhindert, dass Ausgabeblatt.Shapes dreimal wiederholt werden muss.

Sub QuadratFesterLänge()
  With Ausgabeblatt.Shapes
    .AddLine(100,100, 200,100).Visible = True
    .AddLine(200,100, 200,200).Visible = True
    .AddLine(200,200, 100,200).Visible = True
    .AddLine(100,200, 100,100).Visible = True
  End With
End Sub

Die Verwendung einer Subroutine bringt die folgenden Vorteile:

QuadratFesterLänge() ist unflexibel, weil es immer an der gleichen Position ein Quadrat der gleichen Länge zeichnet. Um diesen Mangel zu beheben, erlauben Programmiersprachen die Definition von Argumenten, welche beim Aufruf des Unterprogramms übergeben werden können. Argumente, die sich für jeden Aufruf neu setzen lassen, sind in unserem Beispiel Position und Länge. Das Hilfethema Argumente zeigt am Beispiel Quadrat, wie sie Unterprogramme mit Argumenten definieren können.

Eine Subroutine ist ein Unterprogramm, das aus formal und inhaltlich zusammengehörenden Anweisungen besteht, die sich unter einem Namen aufrufen lassen. Eine zweite Klasse von Unterprogrammen heisst Funktion. Die Entwicklung eines Programms aus verschiedenen Unterprogrammen ist nur dann effizient, wenn eine komfortable Entwicklungsumgebung die Erstellung und den Test von Unterprogrammen unterstützt.